çÏê¨ÅFTim MonroeÅAÇPÇXÇXÇSîNÇPÇOåé
â¸í˘ÅFQuinn "The Eskimo!"ÅAÇPÇXÇXÇWîNÇWåé
DZÇÃÉeÉNÉmÅ[ÉgÇ≈ÇÕÅAInside
Macintosh:MemoryÇÃãLèqÇÃÇ§ÇøÅADZÇÍÇ‹Ç≈ñæÇÁǩDžǻǡǃǢÇÈä‘à·Ç¢Çí˘ê≥ǵÅAÇ‹ÇΩãLèqòRÇÍÇ…ëŒÇ∑ÇÈê‡ñæÇí«â¡ÇµÇ‹Ç∑ÅB
í˘ê≥í«â¡çÄñ⁄
- Figure1-7ÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- è»ó™éûÇÃÉXÉ^ÉbÉNÉTÉCÉYÇÃãLèqÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- SetApplLimitÇÃê‡ñæÇÃí«â¡Å|ÇPÇXÇXÇSîNÇPÇOåé
- ñflÇËílÇÃå^ÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- NewPtrÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- àÍéûìIÇ»ÉÅÉÇÉäÅ[ÉçÉbÉNÇÃóvåèÇ…ëŒÇ∑ÇÈí˘ê≥Å|ÇPÇXÇXÇWîNÇWåé
- àÍéûÉÅÉÇÉäÇÃÉ`ÉFÉbÉNÇÃÉ\Å[ÉXÉRÅ[ÉhÉäÉXÉgÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- 'sysz'ÉäÉ\Å[ÉXÇΔÉVÉXÉeÉÄägí£(System
Extensions)ÇÃê‡ñæÅ|ÇPÇXÇXÇWîNÇWåé
- ÉuÉçÉbÉNÇÃÉAÉâÉCÉÅÉìÉgã´äEÇÃê‡ñæÅ|ÇPÇXÇXÇSîNÇPÇOåé
- ÉuÉçÉbÉNÉwÉbÉ_É_ÉCÉAÉOÉâÉÄÇÃê‡ñæÅ|ÇPÇXÇXÇSîNÇPÇOåé
- LockMemoryContiguousÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- DebuggerGetMaxÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- DebuggerLockMemoryÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
- DebuggerUnlockMemoryÇÃê‡ñæÇÃí˘ê≥Å|ÇPÇXÇXÇSîNÇPÇOåé
Å@
ëÊÇPèÕ ÉÅÉÇÉää«óùì¸ñÂ(Chapter 1 - Introduction to Memory
Management)
Figure 1-7ÇÃê‡ñæÇÃí˘ê≥
Page 1-14
Figure 1-7ÇÃê‡ñæÇÕä‘à·Ç¡ÇƒÇ¢Ç‹Ç∑ÅBFigure
1-7Ç…Ç∑ÇÆë±Ç≠ï∂êflÇÕéüÇ…ÇÊǧDží˘ê≥ǵǃÇ≠ÇæÇ≥Ç¢ÅBÅuFigureÇPÅ|ÇVDžǮǢǃÅAApplication
2ÇÕÅAé©êgÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÉÅÉÇÉäÅ[ÇÇŸÇΔÇÒÇ«égÇ¢êsÇ≠ǵǃǵNjǢNjǵÇΩÅBǪÇÃåãâ ÅAApplication
2ÇÕëÂÇ´Ç»ÉuÉçÉbÉNÇÃàÍéûÉÅÉÇÉäÇóvãÅǵÅAéÛÇØéÊÇËNjǵÇΩÅBApplication
2ÇÕǪÇÃàÍéûÉÅÉÇÉäÇé©óRÇ…égópÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÅv
è»ó™éûÇÃÉXÉ^ÉbÉNÉTÉCÉYÇÃãLèqÇÃí˘ê≥
ÉyÅ[ÉW1-39Ç©ÇÁ1-40ÅAÉXÉ^ÉbÉNÉTÉCÉYÇÃïœçXÅB
ÉhÉLÉÖÉÅÉìÉgÇ≈ÇÕÅAColor
QuickDrawÇ™óòópÇ≈Ç´ÇÈÉRÉìÉsÉÖÅ[É^Ç≈ÉXÉ^ÉbÉNÇÕÅAÉfÉtÉHÉãÉgÇ≈ÇÕÇRÇQÇjÇaÇ‹Ç≈ëùÇ‚Ç∑DZÇΔÇ™Ç≈Ç´ÇÈÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBColor
QuickDrawÇÃÉ}ÉVÉìÇ≈ÇÃÉfÉtÉHÉãÉgÇÃÉXÉ^ÉbÉNÉTÉCÉYÇÕÅAê≥ǵÇ≠ÇÕÇQÇSÇjÇaÇ≈Ç∑ÅBǪÇÍÇ…â¡Ç¶ÇƒÅAÉoÉbÉNÉOÉâÉìÉhêÍópÉAÉvÉäÉPÅ[ÉVÉáÉìÅibackground-only
applicationdžÇÈÇ¢ÇÕfaceless background
processÅjÇÃÉfÉtÉHÉãÉgÉXÉ^ÉbÉNÉTÉCÉYÇÕÇQÇjÇaÇ™ê≥ǵÇ≠ÅAÉyÅ[ÉWÇPÅ|ÇSÇOÇ≈éÂí£Ç≥ÇÍǃǢÇÈÇWÇjÇaÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅB
SetApplLimitÇÃãLèqÇ÷ÇÃí«â¡
ÉyÅ[ÉW1-39,1-52,2-84
SetApplLimitÇÃãLèqÇ…ÅAà»â∫ÇÃéñçÄÇí«â¡ÇµÇƒÇ≠ÇæÇ≥Ç¢ÅBSetApplLimitÇ…ÇÊÇËÅAç≈è¨ÉXÉ^ÉbÉNÉTÉCÉYÇÕã≠êßìIÇ…DefltStackÇΔìôǵÇ≠Ç»ÇËÇ‹Ç∑ÅBó·Ç¶ÇŒColor
QuickDrawã@ÇÃÉoÉbÉNÉOÉâÉEÉìÉhêÍópÉAÉvÉäÉPÅ[ÉVÉáÉì(background-only
application)Ç≈SetApplLimitÇåƒÇÒÇæèÍçáÅASetAppleLimitÇ…ìnÇ≥ÇÍÇΩílÇΔÇÕñ≥ä÷åWÇ…ç≈è¨ÉXÉ^ÉbÉNÉTÉCÉYÇÕÇQÇSÇjÇaÇΔÇ»ÇËÇ‹Ç∑ÅBÉoÉbÉNÉOÉâÉEÉìÉhêÍópÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉpÅ[ÉeÉBÉVÉáÉìÇÕÅADZÇÃÉXÉ^ÉbÉNÉTÉCÉYÇämï€Ç≈Ç´ÇÈÇæÇØÇÃó]óTÇLJǬïKóvǙdžÇËÇ‹Ç∑ÅB
ñflílÇÃå^ÇÃí˘ê≥
ÉyÅ[ÉW1-45,ÉÅÉÇÉäÉuÉçÉbÉNÇÃämï€
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™íËã`ǵÇΩä÷êîNewPtrCushion(Listing
1-7Ç≈íËã`Ç≥ÇÍǃǢÇÈ)ÇÃñflÇËílÇÕHandleÇΔǻǡǃǢNjÇ∑Ç™PtrÇ…í˘ê≥ǵǃÇ≠ÇæÇ≥Ç¢ÅB
NewPtrÇÃãLèqÇÃí˘ê≥
NetPtrÇÃÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assembly-Language
Information)Ç≈ÇÕÅAä÷êîÇÃì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A0ÇÕóvãÅÇ∑ÇÈò_óùÉoÉCÉgêîÇéùǬÇΔèqÇ◊ǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÉåÉWÉXÉ^D0Ç™óvãÅÇ∑ÇÈò_óùÉoÉCÉgêîÇéùÇøÇ‹Ç∑ÅB
Å@
ëÊÇQèÕÅ|ÉÅÉÇÉäÉ}ÉlÅ[ÉWÉÉ(Chapter 2 - Memory Manager)
àÍéûÉÅÉÇÉäÇÃÉçÉbÉLÉìÉOÇÃópåèÇ…ëŒÇ∑ÇÈí˘ê≥
ÉyÅ[ÉW2-10,ÉAÉvÉäÉPÅ[ÉVÉáÉìÉÅÉÇÉäÇÃägí£
ï∂êflÅF
...GetNextEventdžÇÈÇ¢ÇÕWaitNextEventÇÇ‹ÇΩÇ¢ÇæàÍéûÉÅÉÇÉäÇÃÉçÉbÉNÇÕåàǵǃçsÇÌǻǢÇ≈Ç≠ÇæÇ≥Ç¢...([...]
you must never lock temporary memory across calls to
GetNextEvent or WaitNextEvent [...])
Çà»â∫ÇÃÇÊǧDží˘ê≥ǵǃÇ≠ÇæÇ≥Ç¢ÅB
...GetNextEventdžÇÈÇ¢ÇÕWaitNextEventÇÇ‹ÇΩÇ¢ÇæàÍéûÉÅÉÇÉäÇÃÉçÉbÉNÇÕîÇØÇƒâ∫Ç≥Ç¢...([...]
you should avoid locking temporary memory across calls
toÅ@GetNextEvent or WaitNextEvent [...])
è⁄ǵÇ≠ÇÕQ&A
ME08 Temporary MemoryÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
àÍéûÉÅÉÇÉäÇÃÉ`ÉFÉbÉNÉãÅ[É`ÉìÇÃÉ\Å[ÉXÉRÅ[ÉhÉäÉXÉgÇÃí˘ê≥
ÉyÅ[ÉW2-12
ÉyÅ[ÉWÇQÅ|ÇPÇQÇÃÉ\Å[ÉXÉRÅ[ÉhÉäÉXÉgÇ…ÇÕÉGÉâÅ[ǙdžÇËÇ‹Ç∑ÅBéüÇÃçsÅF
TempMemCallsAvailable := BAND(myRsp,
gestaltTempMemSupport) <> 0;
ÇÕà»â∫ÇÃçsÇ≈íuÇ´ä∑ǶǃÇ≠ÇæÇ≥Ç¢ÅF
TempMemCallsAvailable := BTst(myRsp,
gestaltTempMemSupport);
'sysz'ÉäÉ\Å[ÉXÇΔÉVÉXÉeÉÄägí£(System
Extensions)ÇÃê‡ñæ
ÉyÅ[ÉW2-13ÅAãNìÆéûÇÃÉÅÉÇÉäÇÃäÑÇËìñǃ
ÉhÉLÉÖÉÅÉìÉgÇ≈ÇÕSystem7.0à»ç~ÇÃÉVÉXÉeÉÄägí£Ç≈ÇÕÅA'sysz'ÉäÉ\Å[ÉXÇ≈ÉVÉXÉeÉÄÉqÅ[ÉvÇÃïKóvó ÇÉVÉXÉeÉÄÇ…í ímÇ∑ÇÈïKóvǙǻǢÇÊǧDžì«ÇflÇ‹Ç∑ÅBDZÇÃï∂èÕÇÕåÎâÇê∂Ç∂Ç‹Ç∑ÅB'sysz'ÉäÉ\Å[ÉXÇÕëSǃÇÃÉoÅ[ÉWÉáÉìÇÃÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÇ≈óLå¯Ç≈Ç∑ÅB
Ç≥ÇÁÇ…"ÉVÉXÉeÉÄägí£(system
extension)"ÇΔǢǧàÍî ópåÍÇÕÅADZÇÃï∂ñ¨Ç≈ÇÕûBñÜÇ≈Ç∑ÅBÉtÉ@ÉCÉìÉ_ÇÕÅAã@î\ägí£ÉtÉHÉãÉ_(Extension
Folder)ÇÃíÜÇÃëΩÇ≠ÇÃçÄñ⁄ÅAó·Ç¶ÇŒÉRÉìÉ|Å[ÉlÉìÉgÇΔÇ©ÉlÉCÉeÉBÉuÉhÉâÉCÉo('ndrv')ÇÉVÉXÉeÉÄägí£("system
extension")ÇΔï™ófiǵǃǢNjÇ∑ÅBǵǩǵǻǙÇÁÅA'sysz'ÉäÉ\Å[ÉXÇÕ'INIT'ÉäÉ\Å[ÉXÇä‹ÇfiÉtÉ@ÉCÉãÇÃǛDžà”ñ°ÇéùÇøÇ‹Ç∑ÅBÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÅAÉtÉ@ÉCÉãÉ^ÉCÉvÇ™'INIT'ÇÃÉVÉXÉeÉÄägí£ÅA'INIT'ÉäÉ\Å[ÉXÇéùǬÉAÉvÉäÉPÅ[ÉVÉáÉìägí£Ç»Ç«Ç™Ç±ÇÃíÜÇ…ä‹Ç‹ÇÍÇ‹Ç∑ÅBÅmRadar
ID 1245268Ån
'INIT'ÉäÉ\Å[ÉXÇé¿çsÇ∑ÇÈëOÇ…ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉ(Start
Manager)ÇÕÅAç≈èâÇ…ÉVÉXÉeÉÄÉqÅ[ÉvÇ™XÉoÉCÉgÇÃãÛÇ´óÃàÊÇéùǬǩǫǧǩí≤Ç◊Ç‹Ç∑ÅBDZDZÇ≈XÉoÉCÉgÇÕÅAÇPÇUÇjÇaÇ‹ÇΩÇÕǪÇÃÉtÉ@ÉCÉãÇÃ'sysz'ÉäÉ\Å[ÉXÇÃílÇÃÇ§ÇøÇÃëÂÇ´Ç¢ï˚Ç≈Ç∑ÅBãÛÇ´óÃàÊÇ™XÉoÉCÉgñ¢ñûÇÃèÍçáÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅA'INIT'Ç™XÉoÉCÉgÇégǶÇÈÇÊǧDžÉVÉXÉeÉÄÉqÅ[ÉvÇëùǂǵNjÇ∑ÅB
System7.0à»ç~Ç≈ÇÕÅAãNìÆÉvÉçÉZÉX(startup
process)äÆóπå„LJÉVÉXÉeÉÄÉqÅ[ÉvÇëùÇ‚Ç∑DZÇΔÇ™Ç≈Ç´ÇÈDZÇΔÇ…íçà”ǵǃÇ≠ÇæÇ≥Ç¢ÅB'sysz'ÉäÉ\Å[ÉXÇ™êßå‰Ç∑ÇÈÇÃÇÕãNìÆéûÇÃÉVÉXÉeÉÄÉqÅ[ÉvÇÃägí£ÇæÇØÇ≈Ç∑ÅB
ÉuÉçÉbÉNÇÃÉAÉâÉCÉÅÉìÉgã´äEÇÃê‡ñæ
ÉyÅ[ÉW2-22,ÉuÉçÉbÉNÉwÉbÉ_
ÉhÉLÉÖÉÅÉìÉgÇ≈ÇÕÅuMC68020,MC68030ÅAdžÇÈÇ¢ÇÕMC68040Çä‹ÇfiÉRÉìÉsÉÖÅ[É^DžǮǢǃÅAÉuÉçÉbÉNÇÕÇSÉoÉCÉgã´äEÇ…çáÇÌÇπÇÈÇΩÇflÅAïKóvÇ»ÇÁó]ï™Ç»ÉÅÉÇÉäÇ™ïtâ¡Ç≥ÇÍÇÈÅvÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBDZÇÃãLèqÇÕ68040É}ÉVÉìÇ…ä÷ǵǃÇÕä‘à·Ç¢Ç≈ÅA68040É}ÉVÉìÇ≈ÇÕÉuÉçÉbÉNÇÕ16ÉoÉCÉgã´äEÇ≈îzíuÇ≥ÇÍÇ‹Ç∑ÅB
ÉuÉçÉbÉNÉwÉbÉ_É_ÉCÉAÉOÉâÉÄÇÃê‡ñæ
ÉyÅ[ÉW2-22Ç©ÇÁÉyÅ[ÉW2-23,ÉuÉçÉbÉNÉwÉbÉ_
Figure2-1(ÉyÅ[ÉW2-22)ÇΔFigure2-2(ÉyÅ[ÉW2-23)ÇÕåÎâÇê∂Ç∂ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBInside
MacintoshÇ≈ÇÕÉÅÉÇÉäÉ_ÉCÉAÉOÉâÉÄÇï`Ç≠ÇΔÇ´ÅAí èÌí·ÉÅÉÇÉäÉAÉhÉåÉXÇÉ_ÉCÉAÉOÉâÉÄÇÃâ∫ÇÃï˚Ç…íuÇ´Ç‹Ç∑ÅB(ÉyÅ[ÉW1-5ÇÃFigure1-1Ç≈ÇÕÉ_ÉCÉAÉOÉâÉÄÇÃç≈í·à ÉAÉhÉåÉXÇ™ñæé¶Ç≥ÇÍǃǢNjÇ∑ÅBÅjblock
typeÇΔsize
correctionÇä‹ÇfiÉçÉìÉOÉèÅ[ÉhÇÕÇQÇSÉrÉbÉgÉ]Å[ÉìÉwÉbÉ_(24-bit
zone header)ÇÃç≈èâÇÃÉçÉìÉOÉèÅ[ÉhÇ≈Ç∑ÅBìØólÇ…block
typeÇΔñ¢égópóÃàÊÇä‹ÇfiÉçÉìÉOÉèÅ[ÉhÇÕÇRÇQÉrÉbÉgÉ]Å[ÉìÉwÉbÉ_(32-bit
zone header)ÇÃç≈èâÇÃÉçÉìÉOÉèÅ[ÉhÇ≈Ç∑ÅB
Figure2-2(ÉyÅ[ÉW2-23)Ç≈ÇÕÉuÉçÉbÉNÉ^ÉCÉv"11"Ç™çƒîzíuâ¬î\ÉuÉçÉbÉN(relocatable
block)Çé¶Ç∑ÇΔê‡ñæÇ≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÕä‘à·Ç¢Ç≈Ç∑ÅBçƒîzíuâ¬î\ÉuÉçÉbÉNÇÃê≥ǵǢÉ^ÉCÉvéØï éqÇÕ"10"Ç≈Ç∑ÅB
Å@
ëÊÇRèÕ-âºëzãLâØÉ}ÉlÅ[ÉWÉÉ(Chapter 3 - Virtual Memory
Manager)
LockMemoryContiguousÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-29Ç©ÇÁ3-30
LockMemoryContiguousä÷êîÇÃÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assembly-Language
Information)Ç≈ÇÕÅAä÷êîì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A1ÇÕÅuÉAÉìÉçÉbÉN(unlock)Ç∑ÇÈÉoÉCÉgêîÅvÇΔãLÇ≥ÇÍǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÉåÉWÉXÉ^A1ÇÕÉçÉbÉNÇ∑ÇÈ(lock)ÉoÉCÉgêîÇä‹ÇÒÇ≈ǢNjÇ∑ÅB
DebuggerGetMaxÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-34
DebuggerGetMaxÇ≈ÇÕà»â∫ÇÃÇÊǧDžãLèqÇ≥ÇÍǢNjÇ∑(ÉyÅ[ÉW3-34)ÅFÅuÇ‡ÇøÇÎÇÒDebuggerGetMaxä÷êîÇåƒÇ‘ëOÇ…ÅAGestaltä÷êîÇåƒÇÒÇ≈âºëzãLâØÇ™óòópâ¬î\ǩǫǧǩí≤Ç◊Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÅvÅ@âºëzãLâØÇ™óòópÇ≈Ç´ÇÈǩǫǧǩÇí≤Ç◊ÇÈÇ…ÇÕÅAGestaltä÷êîÇégǧÇÊÇËLJÅA_DebugUtilÉgÉâÉbÉvÇ™óòópâ¬î\ǩǫǧǩÇí≤Ç◊ÇÈDZÇΔÇ≈îªíËǵǃÇ≠ÇæÇ≥Ç¢ÅB
DebuggerLockMemoryÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-37
DebuggerLockMemoryä÷êîÇ…ëŒÇ∑ÇÈÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assemly-Language
Information)Ç≈ÇÕ(ÉyÅ[ÉW3-37)ÅAÉgÉâÉbÉvÉ}ÉNÉçÇΔǵǃ_DebuggerLockMemoryÇãìÇ∞ǃǢNjÇ∑ÅBê≥ǵǢÉgÉâÉbÉvÉ}ÉNÉçÇÕ_DebugUtilÇ≈Ç∑ÅBÇ≥ÇÁÇ…ÅADebuggerLockMemoryä÷êîÇ…ëŒÇ∑ÇÈÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assemly-Language
Information)Ç≈ÇÕÅAä÷êîì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A1ÇÕÅuÉzÅ[ÉãÉh
(hold)Ç∑ÇÈÉoÉCÉgêîÅvÇéùǬÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÅAÉåÉWÉXÉ^A1ÇÕÉçÉbÉNÇ∑ÇÈ(lock)ÉoÉCÉgêîÇéùÇøÇ‹Ç∑ÅB
DebuggerUnlockMemoryÇÃê‡ñæÇÃí˘ê≥
ÉyÅ[ÉW3-38
DebuggerUnLockMemoryä÷êîÇ…ëŒÇ∑ÇÈÉAÉZÉìÉuÉâåæåÍèÓïÒ(Assemly-Language
Information)Ç≈ÇÕÅAä÷êîì¸ÇËå˚Ç≈ÉåÉWÉXÉ^A1ÇÕÅuÉzÅ[ÉãÉh
(hold)Ç∑ÇÈÉoÉCÉgêîÅvÇéùǬÇΔãLèqÇ≥ÇÍǃǢNjÇ∑ÅBê≥ǵÇ≠ÇÕÅAÉåÉWÉXÉ^A1ÇÕÉAÉìÉçÉbÉNÇ∑ÇÈ(unlock)ÉoÉCÉgêîÇéùÇøÇ‹Ç∑ÅB
|